from langchain_chroma import Chroma
from langchain_community.document_loaders import BiliBiliLoader
from langchain_community.vectorstores.utils import filter_complex_metadata
from langchain_text_splitters import RecursiveCharacterTextSplitter

from base import embeddings

# 获取bilibili视频字幕
# 参考链接 https://juejin.cn/post/7435760383581995048

# 必须的cookie参数
#获取必要的cookie参数：包括sessdata、bili_jct和buvid3。这些参数可从你登录Bilibili后，通过浏览器的开发者工具中提取。
SESSDATA = "af96e819%2C1754969782%2Cdea0e%2A21CjDd1g4y3XKau9J-iL-TIDMsAkqyeJfyWjCdLR6xWI-g9Rwg5SOy9MNUzpzkFPa9zhkSVnhmT3YyT2xUMEx1NkJpYjNRYjBHdHNlTjJBVF9TamMwZ2dzdkxrLWVsX25mMGsyVXRhNFZjNWt2aHJzQWFSbU4tb1BFVWo1Z0xFVTRPS3lESlZrdllBIIEC"
BUVID3 = "327E8423-F371-0E45-4968-C8D9DF9F206F69230infoc"
BILI_JCT = "f38a026039486e678df57a332e7fc967"

# 配置API Loader
loader = BiliBiliLoader(
    [
        "https://www.bilibili.com/video/BV1t8411y7fp/",  # 示例视频链接
    ],
    sessdata=SESSDATA,
    bili_jct=BILI_JCT,
    buvid3=BUVID3,
)

# 加载文档
docs = loader.load()

print(len(docs))
# 输出文档
# print(docs)
for doc in docs:
    print(f"标题：{doc.metadata['title']}")
    print(f"描述：{doc.metadata['title']}")
    print(f"完整内容 {doc.page_content}")

#构建向量数据库
#1. 构建文本切割器
# 2000个字符做为一个段落 上下可以重复三十个字符
splitter = RecursiveCharacterTextSplitter(chunk_size=500,chunk_overlap=100)
#2. 切割文本获取所有的段落
paragraphDocs = splitter.split_documents(
    filter_complex_metadata(docs)
)
#3. 使用 Chroma 构建向量库 并把向量库存储到 指定目录
vector_store_dir = "store/bilibili_danmu"
#pip install chromadb
Chroma.from_documents(
    paragraphDocs,
    embedding= embeddings,
    #指定向量数据库存储目录
    persist_directory=vector_store_dir
)

#ChatGLM+Langchain构建本地知识库
